home *** CD-ROM | disk | FTP | other *** search
Wrap
SSSSGGGGEEEESSSSUUUUMMMM((((3333SSSS)))) SSSSGGGGEEEESSSSUUUUMMMM((((3333SSSS)))) NNNNAAAAMMMMEEEE SSSSGGGGEEEESSSSUUUUMMMM, DDDDGGGGEEEESSSSUUUUMMMM, CCCCGGGGEEEESSSSUUUUMMMM, ZZZZGGGGEEEESSSSUUUUMMMM - Adds a scalar multiple of a real or complex matrix to a scalar multiple of another real or complex matrix SSSSYYYYNNNNOOOOPPPPSSSSIIIISSSS Single precision Fortran: CCCCAAAALLLLLLLL SSSSGGGGEEEESSSSUUUUMMMM ((((_t_r_a_n_s,,,, _m,,,, _n,,,, _a_l_p_h_a,,,, _a,,,, _l_d_a,,,, _b_e_t_a,,,, _b,,,, _l_d_b)))) C/C++: ####iiiinnnncccclllluuuuddddeeee <<<<ssssccccssssllll____bbbbllllaaaassss....hhhh>>>> vvvvooooiiiidddd ssssggggeeeessssuuuummmm ((((cccchhhhaaaarrrr *_t_r_a_n_s,,,, iiiinnnntttt _m,,,, iiiinnnntttt _n,,,, ffffllllooooaaaatttt _a_l_p_h_a,,,, ffffllllooooaaaatttt *_a,,,, iiiinnnntttt _l_d_a,,,, ffffllllooooaaaatttt _b_e_t_a,,,, ffffllllooooaaaatttt *_b,,,, iiiinnnntttt _l_d_b))));;;; Double precision Fortran: CCCCAAAALLLLLLLL DDDDGGGGEEEESSSSUUUUMMMM ((((_t_r_a_n_s,,,, _m,,,, _n,,,, _a_l_p_h_a,,,, _a,,,, _l_d_a,,,, _b_e_t_a,,,, _b,,,, _l_d_b)))) C/C++: ####iiiinnnncccclllluuuuddddeeee <<<<ssssccccssssllll____bbbbllllaaaassss....hhhh>>>> vvvvooooiiiidddd ddddggggeeeessssuuuummmm ((((cccchhhhaaaarrrr *_t_r_a_n_s,,,, iiiinnnntttt _m,,,, iiiinnnntttt _n,,,, ddddoooouuuubbbblllleeee _a_l_p_h_a,,,, ddddoooouuuubbbblllleeee *_a,,,, iiiinnnntttt _l_d_a,,,, ddddoooouuuubbbblllleeee _b_e_t_a,,,, ddddoooouuuubbbblllleeee *_b,,,, iiiinnnntttt _l_d_b))));;;; Single precision complex Fortran: CCCCAAAALLLLLLLL CCCCGGGGEEEESSSSUUUUMMMM ((((_t_r_a_n_s,,,, _m,,,, _n,,,, _a_l_p_h_a,,,, _a,,,, _l_d_a,,,, _b_e_t_a,,,, _b,,,, _l_d_b)))) C/C++: ####iiiinnnncccclllluuuuddddeeee <<<<ssssccccssssllll____bbbbllllaaaassss....hhhh>>>> vvvvooooiiiidddd ccccggggeeeessssuuuummmm ((((cccchhhhaaaarrrr *_t_r_a_n_s,,,, iiiinnnntttt _m,,,, iiiinnnntttt _n,,,, ssssccccssssllll____ccccoooommmmpppplllleeeexxxx *_a_l_p_h_a,,,, ssssccccssssllll____ccccoooommmmpppplllleeeexxxx *_a,,,, iiiinnnntttt _l_d_a,,,, ssssccccssssllll____ccccoooommmmpppplllleeeexxxx *_b_e_t_a,,,, ssssccccssssllll____ccccoooommmmpppplllleeeexxxx *_b,,,, iiiinnnntttt _l_d_b))));;;; C++ STL: ####iiiinnnncccclllluuuuddddeeee <<<<ccccoooommmmpppplllleeeexxxx....hhhh>>>> ####iiiinnnncccclllluuuuddddeeee <<<<ssssccccssssllll____bbbbllllaaaassss....hhhh>>>> vvvvooooiiiidddd ccccggggeeeessssuuuummmm ((((cccchhhhaaaarrrr *_t_r_a_n_s,,,, iiiinnnntttt _m,,,, iiiinnnntttt _n,,,, ccccoooommmmpppplllleeeexxxx<<<<ffffllllooooaaaatttt>>>> *_a_l_p_h_a,,,, ccccoooommmmpppplllleeeexxxx<<<<ffffllllooooaaaatttt>>>> *_a,,,, iiiinnnntttt _l_d_a,,,, ccccoooommmmpppplllleeeexxxx<<<<ffffllllooooaaaatttt>>>> *_b_e_t_a,,,, ccccoooommmmpppplllleeeexxxx<<<<ffffllllooooaaaatttt>>>> *_b,,,, iiiinnnntttt _l_d_b))));;;; Double precision complex Fortran: CCCCAAAALLLLLLLL ZZZZGGGGEEEESSSSUUUUMMMM ((((_t_r_a_n_s,,,, _m,,,, _n,,,, _a_l_p_h_a,,,, _a,,,, _l_d_a,,,, _b_e_t_a,,,, _b,,,, _l_d_b)))) C/C++: ####iiiinnnncccclllluuuuddddeeee <<<<ssssccccssssllll____bbbbllllaaaassss....hhhh>>>> vvvvooooiiiidddd zzzzggggeeeessssuuuummmm ((((cccchhhhaaaarrrr *_t_r_a_n_s,,,, iiiinnnntttt _m,,,, iiiinnnntttt _n,,,, ssssccccssssllll____zzzzoooommmmpppplllleeeexxxx *_a_l_p_h_a,,,, PPPPaaaaggggeeee 1111 SSSSGGGGEEEESSSSUUUUMMMM((((3333SSSS)))) SSSSGGGGEEEESSSSUUUUMMMM((((3333SSSS)))) ssssccccssssllll____zzzzoooommmmpppplllleeeexxxx *_a,,,, iiiinnnntttt _l_d_a,,,, ssssccccssssllll____zzzzoooommmmpppplllleeeexxxx *_b_e_t_a,,,, ssssccccssssllll____zzzzoooommmmpppplllleeeexxxx *_b,,,, iiiinnnntttt _l_d_b))));;;; C++ STL: ####iiiinnnncccclllluuuuddddeeee <<<<ccccoooommmmpppplllleeeexxxx....hhhh>>>> ####iiiinnnncccclllluuuuddddeeee <<<<ssssccccssssllll____bbbbllllaaaassss....hhhh>>>> vvvvooooiiiidddd zzzzggggeeeessssuuuummmm ((((cccchhhhaaaarrrr *_t_r_a_n_s,,,, iiiinnnntttt _m,,,, iiiinnnntttt _n,,,, ccccoooommmmpppplllleeeexxxx<<<<ddddoooouuuubbbblllleeee>>>> *_a_l_p_h_a,,,, ccccoooommmmpppplllleeeexxxx<<<<ddddoooouuuubbbblllleeee>>>> *_a,,,, iiiinnnntttt _l_d_a,,,, ccccoooommmmpppplllleeeexxxx<<<<ddddoooouuuubbbblllleeee>>>> *_b_e_t_a,,,, ccccoooommmmpppplllleeeexxxx<<<<ddddoooouuuubbbblllleeee>>>> *_b,,,, iiiinnnntttt _l_d_b))));;;; IIIIMMMMPPPPLLLLEEEEMMMMEEEENNNNTTTTAAAATTTTIIIIOOOONNNN These routines are part of the SCSL Scientific Library and can be loaded using either the ----llllssssccccssss or the ----llllssssccccssss____mmmmpppp option. The ----llllssssccccssss____mmmmpppp option directs the linker to use the multi-processor version of the library. When linking to SCSL with ----llllssssccccssss or ----llllssssccccssss____mmmmpppp, the default integer size is 4 bytes (32 bits). Another version of SCSL is available in which integers are 8 bytes (64 bits). This version allows the user access to larger memory sizes and helps when porting legacy Cray codes. It can be loaded by using the ----llllssssccccssss____iiii8888 option or the ----llllssssccccssss____iiii8888____mmmmpppp option. A program may use only one of the two versions; 4-byte integer and 8-byte integer library calls cannot be mixed. The C and C++ prototypes shown above are appropriate for the 4-byte integer version of SCSL. When using the 8-byte integer version, the variables of type iiiinnnntttt become lllloooonnnngggg lllloooonnnngggg and the <<<<ssssccccssssllll____bbbbllllaaaassss____iiii8888....hhhh>>>> header file should be included. DDDDEEEESSSSCCCCRRRRIIIIPPPPTTTTIIIIOOOONNNN SSSSGGGGEEEESSSSUUUUMMMM and DDDDGGGGEEEESSSSUUUUMMMM add two real matrices with optional scaling; CCCCGGGGEEEESSSSUUUUMMMM and ZZZZGGGGEEEESSSSUUUUMMMM add two complex matrices. _B <- _a_l_p_h_a _o_p(_A) + _b_e_t_a _B where * _o_p(_A) represents _A, its transpose _A_T, or its conjugate transpose _A_H * _o_p(_A) and _B are _m-by-_n matrices * _a_l_p_h_a and _b_e_t_a are scalars. _b_e_t_a=0 is a special case, used to copy _a_l_p_h_a*_o_p(_A) to _B. _a_l_p_h_a=0 is a special case, used to scale _B. These routines have the following arguments: _t_r_a_n_s Character. (input) Specifies whether the matrix _A is transposed. PPPPaaaaggggeeee 2222 SSSSGGGGEEEESSSSUUUUMMMM((((3333SSSS)))) SSSSGGGGEEEESSSSUUUUMMMM((((3333SSSS)))) _t_r_a_n_s = 'N' or 'n': _o_p(_A) = _A _t_r_a_n_s = 'T' or 't': _o_p(_A) = _A _T _t_r_a_n_s = 'C' or 'c': _o_p(_A) = _A_T (SSSSGGGGEEEESSSSUUUUMMMM, DDDDGGGGEEEESSSSUUUUMMMM), or _o_p(_A) = _A_H (CCCCGGGGEEEESSSSUUUUMMMM, ZZZZGGGGEEEESSSSUUUUMMMM) For C/C++, a pointer to this character is passed. _m Integer. (input) Specifies the number of rows in matrix _o_p(_A) and in matrix _B. _n Integer. (input) Specifies the number of columns in matrix _o_p(_A) and in matrix _B. _a_l_p_h_a Scalar alpha. (input) SSSSGGGGEEEESSSSUUUUMMMM: Single precision. DDDDGGGGEEEESSSSUUUUMMMM: Double precision. CCCCGGGGEEEESSSSUUUUMMMM: Single precision complex. ZZZZGGGGEEEESSSSUUUUMMMM: Double precision complex. For C/C++, a pointer to this scalar is passed when alpha is complex; otherwise, alpha is passed by value. _a Array of dimension (_l_d_a,_k). (input) SSSSGGGGEEEESSSSUUUUMMMM: Single precision array. DDDDGGGGEEEESSSSUUUUMMMM: Double precision array. CCCCGGGGEEEESSSSUUUUMMMM: Single precision complex array. ZZZZGGGGEEEESSSSUUUUMMMM: Double precision complex array. When _t_r_a_n_s = 'N' or 'n', _k is _n; otherwise, it is _m. When _t_r_a_n_s = 'N' or 'n', the leading _m-by-_n part of the array _a contains matrix _A. When _t_r_a_n_s = 'T' or 't' or _t_r_a_n_s = 'C' or 'c', the leading _n-by-_m part or the array _a contains matrix _A, whose transpose or conjugate transpose will be used in the matrix sum. If _a_l_p_h_a = 0, _a need not be specified on entry. _l_d_a Integer. (input) Specifies the first dimension of _a as declared in the calling program. When _t_r_a_n_s = 'N' or 'n', _l_d_a >= MMMMAAAAXXXX(1,_m); otherwise, _l_d_a >= MMMMAAAAXXXX(1,_n). _b_e_t_a Scalar beta. (input) SSSSGGGGEEEESSSSUUUUMMMM: Single precision. DDDDGGGGEEEESSSSUUUUMMMM: Double precision. CCCCGGGGEEEESSSSUUUUMMMM: Single precision complex. ZZZZGGGGEEEESSSSUUUUMMMM: Double precision complex. PPPPaaaaggggeeee 3333 SSSSGGGGEEEESSSSUUUUMMMM((((3333SSSS)))) SSSSGGGGEEEESSSSUUUUMMMM((((3333SSSS)))) For C/C++, a pointer to this scalar is passed when beta is complex; otherwise, beta is passed by value. _b Array of dimension (_l_d_b,_n). (input/output) SSSSGGGGEEEESSSSUUUUMMMM: Single precision array. DDDDGGGGEEEESSSSUUUUMMMM: Double precision array. CCCCGGGGEEEESSSSUUUUMMMM: Single precision complex array. ZZZZGGGGEEEESSSSUUUUMMMM: Double precision complex array. On entry, if _b_e_t_a is not equal to 0, the _m-by-_n matrix _b contains _B. (If _b_e_t_a = 0, _b need not be specifed on entry.) On exit, _b is overwritten with the matrix sum (_a_l_p_h_a*_o_p(_A) + _b_e_t_a*_B). _l_d_b Integer. (input) The leading dimension of array _b. _l_d_b >= MMMMAAAAXXXX(1,_m). NNNNOOOOTTTTEEEESSSS These routines are extensions to the Level 2 BLAS. The following data types are described in this documentation: TTTTeeeerrrrmmmm UUUUsssseeeedddd DDDDaaaattttaaaa ttttyyyyppppeeee Fortran: Array dimensioned _n xxxx((((nnnn)))) Array of dimensions (_m,_n) xxxx((((mmmm,,,,nnnn)))) Character CCCCHHHHAAAARRRRAAAACCCCTTTTEEEERRRR Integer IIIINNNNTTTTEEEEGGGGEEEERRRR (IIIINNNNTTTTEEEEGGGGEEEERRRR****8888 for ----llllssssccccssss____iiii8888[[[[____mmmmpppp]]]]) Single precision RRRREEEEAAAALLLL Double precision DDDDOOOOUUUUBBBBLLLLEEEE PPPPRRRREEEECCCCIIIISSSSIIIIOOOONNNN Single precision complex CCCCOOOOMMMMPPPPLLLLEEEEXXXX Double precision complex DDDDOOOOUUUUBBBBLLLLEEEE CCCCOOOOMMMMPPPPLLLLEEEEXXXX C/C++: Array dimensioned _n xxxx[[[[_n]]]] Array of dimensions (_m,_n) xxxx[[[[mmmm****nnnn]]]] Character cccchhhhaaaarrrr Integer iiiinnnntttt (lllloooonnnngggg lllloooonnnngggg for ----llllssssccccssss____iiii8888[[[[____mmmmpppp]]]]) PPPPaaaaggggeeee 4444 SSSSGGGGEEEESSSSUUUUMMMM((((3333SSSS)))) SSSSGGGGEEEESSSSUUUUMMMM((((3333SSSS)))) Single precision ffffllllooooaaaatttt Double precision ddddoooouuuubbbblllleeee Single precision complex ssssccccssssllll____ccccoooommmmpppplllleeeexxxx Double precision complex ssssccccssssllll____zzzzoooommmmpppplllleeeexxxx C++ STL: Array dimensioned _n xxxx[[[[_n]]]] Array of dimensions (_m,_n) xxxx[[[[mmmm****nnnn]]]] Character cccchhhhaaaarrrr Integer iiiinnnntttt (lllloooonnnngggg lllloooonnnngggg for ----llllssssccccssss____iiii8888[[[[____mmmmpppp]]]]) Single precision ffffllllooooaaaatttt Double precision ddddoooouuuubbbblllleeee Single precision complex ccccoooommmmpppplllleeeexxxx<<<<ffffllllooooaaaatttt>>>> Double precision complex ccccoooommmmpppplllleeeexxxx<<<<ddddoooouuuubbbblllleeee>>>> Note that you can explicitly declare multidimensional C/C++ arrays provided that the array dimensions are swapped with respect to the Fortran declaration (e.g., xxxx[[[[nnnn]]]][[[[mmmm]]]] in C/C++ versus xxxx((((mmmm,,,,nnnn)))) in Fortran). To avoid a compiler type mismatch error in C++ (or a compiler warning message in C), however, the array should be cast to a pointer of the appropriate type when passed as an argument to a SCSL routine. EEEEXXXXAAAAMMMMPPPPLLLLEEEESSSS An important use of these routines is to copy an array to another array, in which the second array may be a temporary workspace that has a better data layout than the first array. For example, suppose array AAAA was declared as follows in the main program: REAL A(1024, 1024) The following call to SSSSGGGGEEEESSSSUUUUMMMM copies a 64-by-64 block of AAAA to BBBB: CALL SGESUM ('N', 64, 64 1.0, A(1,1), 1024, 0.0, B(1,1), 80) Similarly, the following call copies a 64-by-64 block of the transpose of AAAA to BBBB: CALL SGESUM ('T', 64, 64, 1.0, A(1,1), 1024, 0.0, B(1,1), 80) PPPPaaaaggggeeee 5555 SSSSGGGGEEEESSSSUUUUMMMM((((3333SSSS)))) SSSSGGGGEEEESSSSUUUUMMMM((((3333SSSS)))) SSSSEEEEEEEE AAAALLLLSSSSOOOO IIIINNNNTTTTRRRROOOO____SSSSCCCCSSSSLLLL(3S), IIIINNNNTTTTRRRROOOO____BBBBLLLLAAAASSSS2222(3S), SSSSAAAAXXXXPPPPBBBBYYYY(3S) IIIINNNNTTTTRRRROOOO____CCCCBBBBLLLLAAAASSSS(3S) for information about using the C interface to Fortran 77 Basic Linear Algebra Subprograms (legacy BLAS) set forth by the Basic Linear Algebra Subprograms Technical Forum. PPPPaaaaggggeeee 6666